package se.peterbjorkman.android.trafikkamera;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.DialogInterface.OnClickListener;
import android.content.pm.PackageManager.NameNotFoundException;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class WelcomeDialogBuilder {
	private static final String LOGTAG = WelcomeDialogBuilder.class.getName();
	private static final String LastVersionSetting = "LastVersion";    
    private final Context mContext;

    public  WelcomeDialogBuilder(Context context){
        mContext = context;
    }
    
    public Dialog getWelcomeDialog(){
        AlertDialog.Builder d = new AlertDialog.Builder(mContext);
        long lastVersion = getLastVersionCode(mContext);
        d.setIcon(android.R.drawable.ic_menu_info_details);

        if (lastVersion == 0)
            d.setTitle("Välkommen");
        else
            d.setTitle("Nyheter");

        d.setNegativeButton("Ok", new OnClickListener() {
            
            @Override
            public void onClick(DialogInterface dialog, int which) {
                long currentVersion = getCurrentVersionCode(mContext);
                SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);                
            	SharedPreferences.Editor editor = prefs.edit();
                editor.putLong(LastVersionSetting, currentVersion);
                editor.commit();
            }
        });
        
        View v = LayoutInflater.from(mContext).inflate(R.layout.welcome, null);
       
        ViewGroup layout = (ViewGroup)v.findViewById(R.id.LinearLayout01);
        addMessageToLayout(lastVersion, layout);
        d.setView(v);

        Log.d(LOGTAG, "Returning from onCreateDialog");
        
        return d.create();
    }
    
    private void addMessageToLayout(long lastVersion, ViewGroup layout) {
        TextView textView = (TextView)layout.findViewById(R.id.TextView01);

        Context context = mContext;
        if (lastVersion == 0)
            addInstallInfo(layout, textView, context);
        else
            addUpgradeInfo(lastVersion, layout, textView, context);

        addTextBlock(
            layout, 
            context, 
            "Utveckling", 
            //"Notera att applikationen är under utveckling och ny funktionalitet kommer löpande.");        
        	"Notera att applikationen är i ett tidigt utvecklingsstadie och buggar kan förekomma. Ny funktionalitet kommer löpande.");
    }

    private void addUpgradeInfo(long lastVersion, ViewGroup layout,
            TextView textView, Context context) {
    }

    private void addInstallInfo(ViewGroup layout, TextView textView,
            Context context) {
        String message = "Du har nu installerat TrafikKamera.nu.";
        textView.setText(message);

        InfoBlock gettingStarted = addTextBlock(
                layout, 
                context, 
                "Kom i gång", 
                "För att kunna använda applikationen måste du ladda ner information om tillgängliga trafikkameror.");
        
        gettingStarted.addExtraText("För att ladda ner denna information tryck på telefonens menyknapp och välj Uppdatera efter att du läst klart detta välkomstmeddelande.", context);
        
        InfoBlock mapView = addTextBlock(
                layout, 
                context, 
                "Kartvy", 
                "Genom att välja fliken karta får du upp kameror med känd position.");
        
        mapView.addExtraText("Tyvärr tillhandahåller inte Trafikverket koordinater för alla kammeror så alla kameror återfinns inte på kartan.", context);
        
        addTextBlock(
                layout, 
                context, 
                "Rutter", 
                "Du kan ordna kameror i olika 'rutter' för att snabbt överblicka exempelvis alla kameror på vägen mellan hemmet och arbetsplatsen.");
      }

    private InfoBlock addTextBlock(ViewGroup layout, Context context, String title, String message) {
        InfoBlock newBlock = new InfoBlock(context);
        newBlock.setTitleText(title);
        newBlock.setInfoText(message);
        layout.addView(newBlock);
        return newBlock;
    }

    public static Boolean ShouldBeShown(Context context){
        Log.d(LOGTAG, "In ShouldBeShown");
        return getCurrentVersionCode(context) > getLastVersionCode(context);
    }
    
    public static int getCurrentVersionCode(Context context) {
        Log.d(LOGTAG, "In getCurrentVersionCode");
        try {
            return context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionCode;
        } catch (NameNotFoundException e) {
            Log.e(LOGTAG, "NameNotFoundException in  getVersion " + e.getLocalizedMessage());
            // Ignore.
        }
        Log.w(LOGTAG, "Returning 0 from getCurrentVersionCode");
        return 0;
    }
    
    private static long getLastVersionCode(Context context) {
        Log.d(LOGTAG, "In getLastVersionCode");
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
        return prefs.getLong(LastVersionSetting, 0);
    }
}
